<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Resource extends Model
{
    use HasFactory;
    use SoftDeletes;
    protected $fillable=['adminuser_id','type','title','desc'];
    protected $hidden = ['created_at','updated_at','deleted_at'];
    const VIDEO = 1;
    const DOC = 2;

    // 资源类型获取器
    public function getTypeNameAttribute(){
        return config('project.resource.type')[$this->type];
    }

    // 反向一对多，这个方法名一般就是需要关联的数据表名称
    public function adminUser(){
        // belongsTo里面传入两个参数：1.命名空间  2.要使用关联的字段
        return $this->belongsTo('App\Models\AdminUser','adminuser_id');
    }

    // 一对一关联到视频子表
    public function video(){
        // hasOne 方法用于定义一个模型与另一个模型之间的一对一关系。
        // 具体来说，它表示一个模型（父模型）可以拥有一条与之关联的记录（子模型）。
        return $this->hasOne('App\Models\ResourceVideo');
    }

    // 一对一关联到文档子表
    public function doc(){
        return $this->hasOne('App\Models\ResourceDoc');
    }

    //多对多资源关联，资源关联到章节
    public function chapter(){
        return $this->belongsToMany('App\Models\Chapter','chapter_resources')
        ->orderBy('sort','asc')
        ->withPivot('sort')
        ->withTimestamps();
    }
}
